iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
自我挑戰組

打掉重練!Django的還債之旅~系列 第 25

Day25. render到engine,處理一堆東西~

  • 分享至 

  • xImage
  •  

前言

render裡面的engine究竟是什麼?而當中的get_template又做了什麼事呢?今天就好好的來一層一層往裡面看進去!

正題

接續昨天的部分
https://ithelp.ithome.com.tw/upload/images/20231009/20162905ed5K6MgYJv.png
self.find_tamplate()
https://ithelp.ithome.com.tw/upload/images/20231009/20162905zGOKCkKnvb.png
這邊有又往裡面丟,丟給了loader.get_template()
先看看loader是什麼~
https://ithelp.ithome.com.tw/upload/images/20231009/201629052BZ4yGa7Uz.png
loader在init的時候會被賦予
https://ithelp.ithome.com.tw/upload/images/20231009/20162905i4P4wQqy2Y.png
然後get_template_loaders()呢
https://ithelp.ithome.com.tw/upload/images/20231009/20162905GeQcAq2Qq1.png
會去find該loader後import
https://ithelp.ithome.com.tw/upload/images/20231009/20162905Pcxun2P8Aq.png
直接看一下我們這邊使用到的loader是誰~
可以看到會是cache loader,往這邊看
https://ithelp.ithome.com.tw/upload/images/20231009/201629053NqHmoHz5K.png
那我們要著重在這邊
https://ithelp.ithome.com.tw/upload/images/20231009/20162905jWdt5E4Q4X.png
再去看父類別的get_template function
https://ithelp.ithome.com.tw/upload/images/20231009/20162905Az7mfpLMrH.png
get_template_sources又會回到子類別
https://ithelp.ithome.com.tw/upload/images/20231009/20162905qNWYO2jSLb.png
yield from 複習複習,文章
而這邊的loader會是filesystem和app_directories
https://ithelp.ithome.com.tw/upload/images/20231009/20162905OUfuqfqsBK.png
這邊就會根據檔名找到對應的路徑回傳一個Origin物件
再回到這邊base.loader.get_template
https://ithelp.ithome.com.tw/upload/images/20231009/20162905dvX6r70mEU.png
來看看get_contents()
https://ithelp.ithome.com.tw/upload/images/20231009/20162905vHviCDMcIZ.png
origin剛剛已知是filesystem的loader
https://ithelp.ithome.com.tw/upload/images/20231009/20162905J4pbGAVqmZ.png
直接把內容load進來
而最後也得到content了,再把所丟資訊丟給Template類別
https://ithelp.ithome.com.tw/upload/images/20231009/20162905yqwGhIn2G0.png
而Template在init的時候會去解析該檔案內容
https://ithelp.ithome.com.tw/upload/images/20231009/20162905MyGz6PNjKg.png
這邊就先不深究
回到最源頭django.templates.backends.django.get_template
https://ithelp.ithome.com.tw/upload/images/20231009/20162905UqkJnOerQ2.png
在前面一階段
https://ithelp.ithome.com.tw/upload/images/20231009/20162905E6Z2jj1NX9.png

明天我們再從這邊的render接下去

結語

Template init中最後一步compile_nodelist我沒有去深看,稍微看了一下裡面也是很精彩的code,有興趣的可以嘗試自己追追看~


上一篇
Day24. render~我渲~
下一篇
Day26. render,終於要render context了!
系列文
打掉重練!Django的還債之旅~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言